# @Time : 2024-10-23 17:33
# @Author : Fioman 
# @Phone : 13149920693
"""
1) @classmethod 类方法,属于类,默认接收参数cls,可以使用类的属性和方法
2) @staticmethod 静态方法,属于类,默认不接收任何参数,静态方法本质上就是一个普通方法,只是声明到了类中
                                 没有这两个装饰器的就是普通方法,普通方法就是隶属于对象
3) @property 用于将一个方法转换为属性的装饰器,允许你像访问属性一样调用方法.而不需要显示的调用方法()
"""


class Person:
    moneyTotal = 0  # 类变量,静态变量

    def __init__(self, name, money):
        self.name = name
        self.money = money
        Person.moneyTotal += money  # 所有人的钱的总和

    @classmethod  # 类方法
    def get_total_money(cls):
        return cls.moneyTotal

    # 普通方法
    def get_money(self):
        return self.money

    # 静态方法
    @staticmethod
    def print_money(money):
        print("我仅仅是一个打印的函数: {}".format(money))

    # 将show_money当成属性来使用
    @property
    def show_money(self):
        print(f"{self.name} 获得的钱是:  {self.money} ")
        return self.money


person1 = Person("Fioman", 18)
person2 = Person("Hammer", 1000)

# 1. 调用普通的方法
money1 = person1.get_money()
money2 = person2.get_money()

# 2. 调用类方法
print("TotalMoney = {}".format(Person.get_total_money()))

# 3. 调用静态方法
Person.print_money(money1)  # 通过类对象来调用
person2.print_money(money2)  # 通过实例对象来调用

# 4. 用属性的方式来调用方法,添加了property()之后的就可以用属性的方式调用函数
person1.show_money  # 没有办法传参
person2.show_money  # 没有办法传参
